package com.example.demo.service.exam;

import com.example.demo.domain.PageResult;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.exam.ExamClass;
import com.example.demo.domain.exam.QueryModel;
import com.example.demo.domain.exam.condition.ExamClassCondition;
import com.example.demo.domain.exam.condition.ExamClassStaffCondition;
import com.example.demo.domain.exam.condition.ExamStaffCondition;
import com.example.demo.dto.ExamClassRelationDTO;
import com.example.demo.dto.ExamClassStaffDTO;
import com.example.demo.dto.TrainingClassDTO;

import java.util.List;
import java.util.Map;

public interface ExamClassService {

    /**
     * 创建班级
     * @param entity 班级实体
     */
    void createExamClass(ExamClass entity);

    /**
     * 更新班级
     * @param entity 班级实体
     */
    void updateExamClass(ExamClass entity);

    /**
     * 查询考试班级分页接口
     * @param model 查询条件等
     * @return 分页结果
     */
    PageResult<ExamClass> page(QueryModel<ExamClassCondition> model);

    /**
     * 为考试班级添加人员
     * @param dto 考试班级实体
     */
    void addStaff(ExamClassRelationDTO dto);

    /**
     * 获取培训班信息
     * @return 培训班实体
     */
    List<TrainingClassDTO> getTrainingClass();

    /**
     * 获取培训班人员
     * @param classId 班级标识
     * @return 人员实体
     */
    List<ExamClassStaffDTO> getStaff(Long classId);

    ExamClass getByClassId(Long classId);

    PageResult<ExamClassStaffDTO> pageExamClassStaff(QueryModel<ExamClassStaffCondition> model);

    Map<Long, String> getNameMapByIds(List<Long> classIds);

    /**
     * 分页获取人员
     * @return 人员信息
     */
    List<ExamClassStaffDTO> pageStaff(QueryModel<ExamStaffCondition> model);

    void addStaffForExamClass(ExamClassRelationDTO dto);

    void deleteStaffForExamClass(ExamClassRelationDTO dto);

    List<User> getUserByUserIds(List<Long> userIds);

    List<ExamClass> getByCreatorId(Long creatorId, Long companyId);

}
